package com.molichuxing.services.infrastructure.dto.response;

import com.molichuxing.framework.dto.ResponseRootDto;
import com.molichuxing.services.property.*;
import lombok.Data;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * 订阅里程订单dto
 *
 * @author zoumingyu
 * @date 2019年8月13日
 */
@Data
public class OrderExclusivelDto extends ResponseRootDto {
    private static final long serialVersionUID = -1627290979695478084L;

    /**
     * id
     */
    private Integer id;

    /**
     * 订单号 order_code
     */
    private Long orderCode;

    /**
     * 用户id user_id
     */
    private Integer userId;

    /**
     * 车辆id car_id
     */
    private Integer carId;

    /**
     * 租金（总租金） cart_fee
     */
    private BigDecimal cartFee;

    /**
     * 保证金 deposit
     */
    private BigDecimal deposit;

    /**
     * 下单时间 order_time
     */
    private LocalDateTime orderTime;

    /**
     * 支付方式( 11：智能终端-微信， 12：智能终端-支付宝， 13：智能终端-pos机，21：微信-公众号，22：微信-H5，
     * 23：微信-APP，34：微信-扫码，25：微信-小程序，31：支付宝-APP，32：支付宝-H5，41:
     * 线下支付，51：银联-APP，51：银联-H5) pay_way
     */
    private OrderPayWayEnum payWay;

    /**
     * 支付时间(首付时间) pay_time
     */
    private LocalDateTime payTime;

    /**
     * 提车截止日期(过期锁定时间) delivery_deadline
     */
    private LocalDateTime deliveryDeadline;

    /**
     * 订单来源（1：智能终端（AIO），2：手机APP（Android），3：手机APP（IOS），4：微信小程序（APPLET），5：微信公众号（JSAPI），6：H5页面（MWEB））
     * source
     */
    private OrderSourceEnum source;

    /**
     * 下单门店id place_store_id
     */
    private Integer placeStoreId;

    /**
     * 下单设备编号（智能终端下单为终端cpu） place_device_num
     */
    private String placeDeviceNum;

    /**
     * 下销售顾问id place_salesman_id
     */
    private Integer placeSalesmanId;

    /**
     * 起租日 lease_inception
     */
    private LocalDate leaseInception;

    /**
     * 截止日（起租日加租期） lease_expire
     */
    private LocalDate leaseExpire;

    /**
     * 订单状态（） order_status
     */
    private OrderExclusivelStatusEnum orderStatus;

    /**
     * 订单预警里程 warning_mileage
     */
    private Integer warningMileage;

    /**
     * 订单起始车辆里程 start_mileage
     */
    private Integer startMileage;

    /**
     * 是否删除(0：未删除，1：删除) is_delete
     */
    private Boolean isDelete;

    /**
     * 商品id goods_id
     */
    private Integer goodsId;

    /**
     * 商品编码 goods_code
     */
    private String goodsCode;

    /**
     * 专属商品类型：1：专属里程，2：订悦里程 type
     */
    private OrderExclusivelTypeEnum type;

    /**
     * 车型id vehicle_id
     */
    private Integer vehicleId;

    /**
     * 商品租车费(商品信息) rental
     */
    private BigDecimal rental;

    /**
     * 服务费 service_fee
     */
    private BigDecimal serviceFee;

    /**
     * 付款方式（1：一次性付清，2：分期） payment_method
     */
    private OrderPaymentMethodEnum paymentMethod;

    /**
     * 还款周期（1：1个月，n：n个月） repayment_period
     */
    private Integer repaymentPeriod;

    /**
     * 首付期数（1：1期，2：2期，n：n期） first_terms
     */
    private Integer firstTerms;

    /**
     * 结算日（1：1号...28：28号） settle_day
     */
    private Integer settleDay;

    /**
     * 过户时限（0：无，n：n个月） transfer_time
     */
    private Integer transferTime;

    /**
     * 过户费 transfer_fee
     */
    private BigDecimal transferFee;

    /**
     * 用车时长（1：1个月，n：n个月） transport_time
     */
    private Integer transportTime;

    /**
     * 是否回购（0：不回购，1：回购） is_buyback
     */
    private Boolean isBuyback;

    /**
     * 回购金额 buyback_amount
     */
    private BigDecimal buybackAmount;

    /**
     * 保底回购价 minimun_guarantee_amount
     */
    private BigDecimal minimunGuaranteeAmount;

    /**
     * 残值购买费 scrap_value
     */
    private BigDecimal scrapValue;

    /**
     * 限制里程 limit_mileage
     */
    private Integer limitMileage;

    /**
     * 合同模板ids，多个逗号分隔 contract_template_ids
     */
    private String contractTemplateIds;

    public OrderExclusivelDto setPaymentMethod(Integer paymentMethod) {
        this.paymentMethod = paymentMethod == null ? null : OrderPaymentMethodEnum.getEnum(paymentMethod);
        return this;
    }

    public OrderExclusivelDto setPayWay(Integer payWay) {
        this.payWay = payWay == null ? null : OrderPayWayEnum.getEnum(payWay);
        return this;
    }

    public OrderExclusivelDto setSource(Integer source) {
        this.source = source == null ? null : OrderSourceEnum.getEnum(source);
        return this;
    }

    public OrderExclusivelDto setOrderStatus(Integer orderStatus) {
        this.orderStatus = orderStatus == null ? null : OrderExclusivelStatusEnum.getEnum(orderStatus);
        return this;
    }

    public OrderExclusivelDto setType(Integer type) {
        this.type = type == null ? null : OrderExclusivelTypeEnum.getEnum(type);
        return this;
    }
}
